cout << (i < j) ? i : j; 解释?

来源:百度知道 编辑:UC知道 时间:2024/05/10 19:56:53
i=15,j=20;
cout << (i < j) ? i : j; 如何解释?答案为何是1?
cout ? i : j; 如何解释?
cout << (i < j ? i : j); 这个答案是15

源码
#include <iostream>
using std::cout; using std::endl;
int main()
{
int i = 15, j = 20;
cout << (i < j ? i : j);
cout << endl;
cout << (i < j) ? i : j;
cout << endl;
cout << (i < j);
cout ? i : j;
cout << endl;
return 0;
}

“(cout << (i < j)) ? i : j;
首先输出i<j的值,即为1,然后表式cout << (i < j)返回cout的值,即1
然后变为cout ? i : j,或者说变为 1 ? i: j;它返回i的值,即为15
但是这个表达式的值没被输出,程序没有使用它.
”为什么没有使用它?

cout << (i < j) ? i : j;

由于结合性,等价为

(cout << (i < j)) ? i : j;
首先输出i<j的值,即为1,然后表式cout << (i < j)返回cout的值,即1
然后变为cout ? i : j,或者说变为 1 ? i: j;它返回i的值,即为15
但是这个表达式的值没被输出,程序没有使用它.

对于
cout << (i < j ? i : j);
它是输出表达式i < j ? i : j的值,而要计算表达式,首先计算i<j
得真,所以返回i的值作为该表达式的值,为15,并将其输出

这是一个常见的陷阱,平时要注意一下.

cout << (i < j) ? i : j;
如果i<j,则输出i,否则输出j。在本例中cout的输出为15

等同于
if(i < j)
cout << i;
else
cout << j;

答案应该是15吧
如果I<J哪么正确的话输出I错误的话输出J